package com.hkedou.yuanhuo.plugin;


import com.alibaba.fastjson.JSON;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.web.servlet.config.annotation.ContentNegotiationConfigurer;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class CorssConfig  {



    Logger logger= LoggerFactory.getLogger("com.hkedou.corsconfig");

    @Value("${hkedou.corss.allowedorigins}")
    String[] allowedorigins;

    @Bean
    public WebMvcConfigurer crossConfigurer()
    {
        return new WebMvcConfigurer(){
            public void addCorsMappings(CorsRegistry registry) {
                logger.info("-------CorssConfig.addCorsMappings.allowedorigins="+ JSON.toJSONString(allowedorigins));
                registry.addMapping("/**")
                        //允许的域列表，“*”表示支持所有的域
                        .allowedOrigins(allowedorigins)
//                        .allowedHeaders("Content-Type, x-requested-with, X-Custom-Header, Hkedou-Access-Token")
                        /**
                         * 设置是否发送凭证，该值是在预请求的响应的“Access-Control-Max-Age”上设置的。该值决定在发起跨域请求时，浏览器是否需要发送凭证。
                         * false　　—　　cookies不应该包括在内；
                         * ""　　　 —　　意味着未定义，允许所有值；
                         * true　　 —　　预响应将包括值设置为true的报头Access-Control-Allow-Credentials
                         */
                        .allowCredentials(true)
                        //支持的HTTP请求方法集合
                        .allowedMethods("GET", "POST", "DELETE", "PUT")
                        //预响应缓存的最大持续时间，单位秒
                        .maxAge(100);

            }

            public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
                logger.info("---------CorssConfig.configureContentNegotiation");
                configurer.favorPathExtension(true)
                        .ignoreAcceptHeader(true).
                        defaultContentType(MediaType.APPLICATION_JSON_UTF8);
                configurer.favorPathExtension(false);
                configurer.mediaType("json",MediaType.APPLICATION_JSON_UTF8);
            }
        };
    }



}
